package com.configtools;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;
import lombok.extern.slf4j.Slf4j;

/**
 * ConfigTools 应用程序主入口类
 * 
 * @author ConfigTools Team
 * @version 1.0.0
 */
@Slf4j
public class ConfigToolsApplication extends Application {
    
    /** 应用程序标题 */
    private static final String APP_TITLE = "ConfigTools - Excel配置代码生成工具";
    
    /** 主界面FXML文件路径 */
    private static final String MAIN_FXML = "/fxml/main.fxml";
    
    /** 应用程序图标路径 */
    private static final String APP_ICON = "/images/app-icon.png";
    
    /** 主界面最小宽度 */
    private static final double MIN_WIDTH = 1000.0;
    
    /** 主界面最小高度 */
    private static final double MIN_HEIGHT = 600.0;
    
    /** 主界面默认宽度 */
    private static final double DEFAULT_WIDTH = 1200.0;
    
    /** 主界面默认高度 */
    private static final double DEFAULT_HEIGHT = 800.0;

    @Override
    public void start(Stage primaryStage) throws Exception {
        log.info("启动 ConfigTools 应用程序...");
        
        try {
            // 加载主界面FXML
            FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(MAIN_FXML));
            Parent root = fxmlLoader.load();
            
            // 创建场景
            Scene scene = new Scene(root, DEFAULT_WIDTH, DEFAULT_HEIGHT);
            
            // 加载CSS样式文件
            String cssPath = getClass().getResource("/css/main.css").toExternalForm();
            scene.getStylesheets().add(cssPath);
            
            // 配置主窗口
            primaryStage.setTitle(APP_TITLE);
            primaryStage.setScene(scene);
            
            // 设置窗口最小尺寸
            primaryStage.setMinWidth(MIN_WIDTH);
            primaryStage.setMinHeight(MIN_HEIGHT);
            
            // 设置应用程序图标
            try {
                Image icon = new Image(getClass().getResourceAsStream(APP_ICON));
                primaryStage.getIcons().add(icon);
                log.debug("成功加载应用程序图标");
            } catch (Exception e) {
                log.warn("无法加载应用程序图标: {}", e.getMessage());
            }
            
            // 显示主窗口
            primaryStage.show();
            
            log.info("ConfigTools 应用程序启动成功");
            
        } catch (Exception e) {
            log.error("启动应用程序时发生错误: ", e);
            throw e;
        }
    }

    @Override
    public void stop() throws Exception {
        log.info("正在关闭 ConfigTools 应用程序...");
        super.stop();
        log.info("ConfigTools 应用程序已关闭");
    }

    /**
     * 应用程序主入口方法
     * 
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        log.info("ConfigTools 应用程序 v1.0.0 正在启动...");
        
        try {
            // 启动JavaFX应用程序
            launch(args);
        } catch (Exception e) {
            log.error("启动应用程序失败: ", e);
            System.exit(1);
        }
    }
}
